module.exports = {
  // ? 解析 applicetion/x-www-form-urlencoded 格式的请求体
  urlencoded(req, _, next) {
    // 获取请求头 Content-Type 判断请求体数据类型(小写)
    if (req.headers['content-type'] === 'application/x-www-form-urlencoded') {
      // 解析 query 字符串格式的请求体
      let str = ''
      // 请求体的数据量一般较大，使用 stream 读取(req, res 本身就是一个 文件流(stream) 对象)
      req.on('data', (chunk) => {
        str += chunk.toString('utf-8')
      })
      // 读取完毕
      req.on('end', () => {
        // console.log(str)
        // console.log(str.split('&'))  // split 截取的字符不存在，直接返回原数组
        const result = str.split('&').reduce((prev, current) => {
          const [key, value] = current.split('=')
          // ? obj[] 需计算的成员访问 
          prev[key] = value
          return prev
        }, {})
        req.body = result
        next()
      })
    } else {
      next()
    }
  },
  json(req, res, next) {
    if (req.headers['content-type'] === 'application/json') {
      // 解析 json 格式的请求体数据
      let str = ''
      req.on('data', (chunk) => {
        str += chunk.toString('utf-8')
      })
      // 读取完毕
      req.on('end', () => {
        req.body = JSON.parse(str)
        next()
      })
    } else {
      next()
    }
  }
}